<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

</body>
<script>
  // - 公有属性和公有方法:设置给实例化对象的属性和方法被称作公有属性和公有方法
  // function Box(){
  //     this.userName = "zhangsan",// 实例属性
  //     this.run = function(){// 实例方法
  //
  //     }
  // }
  // Box.prototype.age = 12,// 原型属性
  // Box.prototype.fn = function(){
  //     // 原型方法
  // }
  // - 私有属性和私有方法:声明在构造函数中的变量或函数，被称作为私有属性和私有方法
  // function Box(){
  //     var userName = "zhangsan";// 私有属性
  //     var age = 12;//  私有属性
  //     var fn = function(){
  //         //  私有方法
  //     }
  // }
  // - 静态属性和方法:`js`中无需实例化就可以调用的方法叫做静态方法。
  // function Box(){
  //
  // }
  // Box.userName = "zhangsan";// 静态属性
  // Box.run = function(){// 静态方法
  //
  // }

  // - 特权方法 :在构造函数内部通过this关键字定义的的方法，可以被实例化的对象调用。
  function Box(){
      var bookName = "天龙八部";// 私有的属性
      this.getBookName = function(){
          return "《"+bookName+"》";
      }
      this.setBookName = function (v){
          bookName = v;
      }
  }
  const obj = new Box();
  console.log(obj.bookName);// undefined
  console.log(obj.getBookName());//《天龙八部》
  obj.setBookName("吞噬星空");
  console.log(obj.getBookName());//《吞噬星空》
</script>
</html>